#include <csignal>
#include <functional>
#include <unistd.h>
#include <fmt/core.h>
#include <vector>
#include <sys/wait.h>


int main()
{
    pid_t id = fork();
    if (id == 0)
    {
        sleep(2);
        printf("hello bit\n");
        printf("hello bit\n");
        printf("hello bit\n");
        printf("hello bit\n");
        printf("hello bit\n");
        int a = 10;
        a /= 0;
        printf("hello bit\n");

        exit(1);
    }
    int status = 0;
    waitpid(id, &status, 0);
    printf("signal: %d, exit code: %d, core dump: %d\n",
           (status & 0x7F), (status >> 8) & 0xFF, (status >> 7) & 0x1);
}


//int main()
//{
//    printf("hello\n");
//    printf("hello\n");
//    printf("hello\n");
//    printf("hello\n");
//    int n = 10;
//    n / 0;
//    printf("hello\n");
//    printf("hello\n");
//    printf("hello\n");
//    printf("hello\n");
//    return 0;
//}

//////////////func//////////////
//void Sched()
//{
//    fmt::print("我是进程调度\n");
//}
//void MemManger()
//{
//    fmt::print("我是周期性的内存管理, 正在检查有没有内存问题\n");
//}
//void Fflush()
//{
//    fmt::print("我是刷新程序, 我正在定期刷新内存数据, 到磁盘\n");
//}
////////////////////////////////
//
//using func_t = std::function<void()>;
//std::vector<func_t> funcs;
//
//void handlerSig(int sig)
//{
//    fmt::print("####################\n");
//    for (auto f : funcs)
//        f();
//    fmt::print("####################\n");
//    int n = alarm(1);
//}
//
//int main()
//{
//    funcs.push_back(Sched);
//    funcs.push_back(MemManger);
//    funcs.push_back(Fflush);
//    
//    signal(SIGALRM, handlerSig);
//    alarm(1);
//    
//    while (true)
//    {
//        pause();
//    }
//    return 0;
//}
